package Demo08.Demo0818;
//这里是关于第五节  方法的使用的课前预习
import java.util.Scanner;

public class Prepare {
    public static void main1(String[] args) {}  //1 这里啥也没用，单纯凑个数
    public static void main2(String[] args) {
        //2.方法的概念以及使用
        //  题目： 实现一个方法，检测一个数是否为闰年
        /*
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个数字：");
        int a = sc.nextInt();
        System.out.println(isLeaper(a));//对比PPT，我直接打印调用，没有赋值*/
        //  题目： 实现两个数字相加
        /*
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入两个数字：");
        int a = sc.nextInt();
        int b = sc.nextInt();
        System.out.println(myAdd(a,b));
        */
        //  题目： 计算 1！ + 2！ + 3！ + 4！ + 5！
        Scanner sc = new Scanner(System.in);
        System.out.println("老铁输入一个数字：");
        int a = sc.nextInt();
        int res = 0;
        for (int i = 1; i < a; i++) {
            res += fac(i);
        }
        System.out.println(a + "的阶乘总和为" + res);
        //  题目： 交换两个整型变量
        /*int a = 10;
        int b = 20;
        swap(a,b);
        */

    }  //2 方法的简单应用以及里面的一些小问题
    public static void main3(String[] args) {
        int a = 1,b = 2;
        double c = 1.0,d = 2.0;
        System.out.println(myAdd(a,b));
        System.out.println(myDoubleAdd(c,d));
    }//3 方法的重载
    public static void main(String[] args){
        //先来个小尝试，递归求阶乘！
      /*  int a = 5;
        int res = myFactor(a);
        System.out.println(res);
        System.out.println(myFactor(5));*/
        //第一题：按顺序打印一个数字的每一位（例如 1234 打印出 1 2 3 4）
        int a = 65898;
        print(a);
        //第二题： 递归求 1 + 2 + ... + 10
      /*  int a = 10;
        System.out.println(sum(a));*/
        //第三题：写一个递归方法，输入一个非负整数，返回组成他数字的和，例如，输入 1729，则应该返回 1 + 7 + 2 + 9，和是19
       /* Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        System.out.println("该数字每一位数字总和为：" + mySum(a));*/
        //第四题：求斐波那契数列,前两项之和等于第三项
      /*  int a = 9;
        System.out.println(fib(a));*/
           //这里稍后进行改进！
    }//关于递归
    public static int mySum(int a){
        if(a < 10){
            return a;
        }
        return a % 10 + mySum(a / 10);
    }//递归：求一个非负整数它每一位数字之和
    public static int fib(int a){
        if(a == 1 || a == 2){
            return 1;
        }
        return fib(a - 2) + fib(a - 1);
    }//递归：求斐波那契数列
    public static int sum(int a){
        if(a == 1){
            return 1;  //这里是第一次代码需要注意的地方！！ 我没有思考到 最后当a = 1的时候的情况。
        }
        return a + sum(a - 1);
    }//递归：关于递归求单调递增数列的总和
    public static int myFactor(int a){
        if(a == 1){
            return 1;
        }
        return a * myFactor(a -1);
    }//递归：递归求阶乘
    public static void print(int a){
       if(a < 9) {
           System.out.print(a % 10 + " ");
       }else {
           print(a / 10);
           System.out.print(a % 10 + " ");
       }
    }//递归：  递归打印数字的每一位
    public static boolean isLeaper(int a){
        return (a % 4 == 0  || a % 100 != 0) || a % 400 == 0; //我这里直接返回，没有使用 if  else 语句
    }//计算闰年
    public static int myAdd(int a,int b){
        return a + b;
    }//计算两数相加
    public static int fac(int a){
        int  sum = 1;
        for (int i = 1; i <= a; i++) {
            sum *= i;
        }
        System.out.println(a + "的阶乘是" + sum);
        return  sum;
    }//计算阶乘
    public static void swap(int a,int b){
        int tmp = a;
        a = b;
        b = tmp;
        System.out.println("a的值是" + a + "\nb的值是" + b);
    }//两个整形数字交换
    public static double myDoubleAdd(double a,double b){
        return a + b;
    }//这里是方法的重载
}
